package br.com.estudosjsf.leilao.domain;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.enterprise.context.Dependent;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;

@Dependent
@Entity
public class Anuncio implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
	@Id
	@GeneratedValue(generator="anuncio_id_seq", strategy=GenerationType.SEQUENCE)
	@SequenceGenerator(name="anuncio_id_seq",sequenceName="anuncio_id_seq", allocationSize=1)
	private Integer id;
	private String titulo;
	private String descricao;
	private Integer anoModelo;
	private Integer anoFabricacao;
	private String uf;
	private String cidade;
	private Boolean precoFixo = true;
	private Double valor;
	private Double valorLanceAtual;
	private Boolean vendido;
	
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="id_modelo")
	private Modelo modelo;
	
	@OneToMany(mappedBy="anuncio", fetch=FetchType.EAGER)
	private List<ImagemAnuncio> imagensAnuncio = new ArrayList<ImagemAnuncio>();
	
	//Metodo de negocio. Retorna lista de imagens como list
	public List<String> getImagensComoListaDeStrings() {
		List<String> imagensComoListaSrting = new ArrayList<String>();
		for(ImagemAnuncio img : imagensAnuncio){
			imagensComoListaSrting.add(img.getNome());
		}
		return imagensComoListaSrting;
	}
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	
	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Integer getAnoModelo() {
		return anoModelo;
	}

	public void setAnoModelo(Integer anoModelo) {
		this.anoModelo = anoModelo;
	}

	public Integer getAnoFabricacao() {
		return anoFabricacao;
	}

	public void setAnoFabricacao(Integer anoFabricacao) {
		this.anoFabricacao = anoFabricacao;
	}

	public String getUf() {
		return uf;
	}

	public void setUf(String uf) {
		this.uf = uf;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public Boolean getPrecoFixo() {
		return precoFixo;
	}

	public void setPrecoFixo(Boolean precoFixo) {
		this.precoFixo = precoFixo;
	}

	public Double getValor() {
		return valor;
	}

	public void setValor(Double valor) {
		this.valor = valor;
	}

	public Double getValorLanceAtual() {
		return valorLanceAtual;
	}

	public void setValorLanceAtual(Double valorLanceAtual) {
		this.valorLanceAtual = valorLanceAtual;
	}

	public Boolean getVendido() {
		return vendido;
	}

	public void setVendido(Boolean vendido) {
		this.vendido = vendido;
	}

	public Modelo getModelo() {
		return modelo;
	}

	public void setModelo(Modelo modelo) {
		this.modelo = modelo;
	}

	public List<ImagemAnuncio> getImagensAnuncio() {
		return imagensAnuncio;
	}

	public void setImagensAnuncio(List<ImagemAnuncio> imagensAnuncio) {
		this.imagensAnuncio = imagensAnuncio;
	}

	@Override
	public int hashCode() {
		return getTitulo().length() * 8;
	}
	
	@Override
	public boolean equals(Object obj) {
		if((obj instanceof Anuncio) && ((Anuncio)obj).getTitulo().equals(this.getTitulo())){
			return true;
		} else{
			return false;
		}
	}
}